﻿namespace Zove.Runtime.Core {
    /// <summary>
    /// The inference strategy
    /// </summary>
    public interface IInferencingStrategy {

        /// <summary>
        /// The name of the strategy
        /// </summary>
        string Name { get; set; }

        /// <summary>
        /// Priority
        /// </summary>
        /// <returns>the priority</returns>
        int Priority { get; set; }

        /// <summary>
        /// Run the alogrithm
        /// </summary>
        /// <param name="zoveObject">the model instance</param>
        void Infer(ZoveObject zoveObject);

        /// <summary>
        /// Evaluate a factor
        /// </summary>
        /// <param name="sf">the factor</param>
        /// <returns>the result</returns>
        double Evaluate(SolvedFactor sf);

        /// <summary>
        /// Enable or disable the strategy
        /// </summary>
        bool Enable { get; set; }
    }
}
